package com.ctg.itrdc.imageconsole.service;

import java.util.List;

import com.ctg.itrdc.imageconsole.data.dto.DockerAppTypeDTO;
import com.ctg.itrdc.imageconsole.data.dto.DockerImageFileDTO;
import com.ctg.itrdc.imageconsole.data.entity.DockerAppType;
import com.ctg.itrdc.imageconsole.dto.DockerAppTypeDetailDTO;
import com.ctg.itrdc.paspsdk.common.entity.PageInfo;

public interface IDockerAppTypeService {
	
	/**
	 * 应用镜像分组基础信息和所含镜像个数，根据租户id过滤，可分页
	 * @param dockerAppTypeDTO
	 * @param tenantId 租户id
	 * @param currentPage
	 * @param perPageNum
	 * @return
	 */
	PageInfo<DockerAppTypeDTO> queryDockerAppTypePageInfo(DockerAppTypeDTO dockerAppTypeDTO, Long tenantId,
			Integer currentPage, Integer perPageNum);

	/**
	 * 应用镜像分页查询，不传入参数groupId意味着查询全部应用镜像
	 * @param groupId
	 * @param tenantId 租户id
	 * @param currentPage
	 * @param perPageNum
	 * @return
	 */
	PageInfo<DockerImageFileDTO> queryImageFileByGroupId(Long groupId, DockerImageFileDTO dockerImageFileDTO, 
			Long tenantId, Integer currentPage, Integer perPageNum);
	
	/**
	 * 找出某一镜像分组底下可加入的镜像
	 * @param groupId
	 * @param dockerImageFileDTO
	 * @param tenantId
	 * @param currentPage
	 * @param perPageNum
	 * @return
	 */
	PageInfo<DockerImageFileDTO> canAddImageFileByGroupId(Long groupId, DockerImageFileDTO dockerImageFileDTO, 
			Long tenantId, Integer currentPage, Integer perPageNum);
	
	/**
	 * 查询所有应用镜像以及所含镜像个数，没分页
	 * @throws Exception 
	 */
	List<DockerAppTypeDTO> findAllDockerAppTypeAndCount() throws Exception;
	
	/**
	 * 查询某应用镜像以及所含镜像，后台管理所需
	 * @throws Exception 
	 */
	DockerAppTypeDetailDTO findDockerAppTypeAndIncludeImage(Long dockerAppTypeId) throws Exception;
	
	/**
	 * 新增应用镜像分组，同时插入所选应用镜像的关联
	 * @param dockerAppTypeDTO
	 * @return
	 */
	Long insertAppTypeAndSelectImageFile(DockerAppTypeDTO dockerAppTypeDTO);
	
	/**
	 * 新增应用镜像分组，不选应用镜像
	 * @param dockerAppTypeDTO
	 * @return
	 */
	Long insertAppType(DockerAppTypeDTO dockerAppTypeDTO);
	
	/**
	 * 找出某应用镜像所含的镜像
	 * @throws Exception 
	 */
	List<DockerImageFileDTO> findDockerAppTypeRelImgFile(Long dockerAppTypeId) throws Exception;
	
	/**
	 * 更新应用镜像分组，同时更新所选应用镜像的关联
	 * @param dockerAppTypeDTO
	 * @return
	 */
	int updateAppTypeAndSelectImageFile(DockerAppTypeDTO dockerAppTypeDTO);
	
	/**
	 * 更新应用镜像分组
	 * @param dockerAppTypeDTO
	 * @return
	 */
	int updateAppType(DockerAppTypeDTO dockerAppTypeDTO);
	
	/**
	 * 删除应用镜像分组，同时删除所选应用镜像的关联
	 * @param entity
	 * @return
	 */
	int deleteByPrimaryKey(Long id);
	
	DockerAppType findByPrimaryKey(Long id);
	
	/**
	 * 批量增加镜像分组的镜像文件
	 * @param imageFileIds
	 * @param appTypeId
	 */
	void batchAddImgFileToAppType(Long[] imageFileIds, Long appTypeId);
	
}
